﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DataAccess;
using QuanLyKhachSan.TemplateReport;
using DevExpress.XtraReports.UI;
using NLog;

namespace QuanLyKhachSan
{
    public partial class TabHoaDonThuePhong : XtraUserControl,IGeneatetabName
    {
        BindingSource bs = new BindingSource();
        HoaDonThuePhongManager controller = new HoaDonThuePhongManager();
        protected static Logger _logger = LogManager.GetCurrentClassLogger();

        public TabHoaDonThuePhong()
        {
            InitializeComponent();
        }

        public string Getname()
        {
            return "Hóa đơn thuê phòng";
        }

        private void TabHoaDonThuePhong_Load(object sender, EventArgs e)
        {
            Loading();

        }

        private void Loading()
        {
            if (!controller.LayDanhSach().Result.Any())
            {
                MessageBox.Show(controller.LayDanhSach().Exceptions.First().Message);
            }
            else
            {
                bs.DataSource = controller.LayDanhSach().Result;
                dgvHoaDonThuePhong.DataSource = bs;
                dgvHoaDonThuePhong.Columns[7].Width = 150;
                for (int i = 10; i < dgvHoaDonThuePhong.Columns.Count; i++)
                {
                    dgvHoaDonThuePhong.Columns[i].Visible = false;
                }
            }
        }

        private void dgvHoaDonThuePhong_Click(object sender, EventArgs e)
        {
            int selectedRow = TimDong();
            if (selectedRow >= 0)
            {
                toolStripStatusLabel2.Text = dgvHoaDonThuePhong.Rows[selectedRow].Cells[0].Value + "";
            }
        }

        private int TimDong()
        {
            for (int i = 0; i < dgvHoaDonThuePhong.Rows.Count; i++)
            {
                if (dgvHoaDonThuePhong.Rows[i].Selected)
                {
                    return i;
                }
            }
            return -1;
        }

        private int TimDong(string ma)
        {
            for (int i = 0; i < dgvHoaDonThuePhong.Rows.Count; i++)
            {
                if (dgvHoaDonThuePhong.Rows[i].Cells[0].Value + "" == ma)
                {
                    return i;
                }
            }

            return -1;
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            var them = true;
            _logger.Info(Commons.ToString() + ", Chọn thao tác thêm hóa đơn thuê phòng");

            frmThongTinHoaDonThuePhong frm = new frmThongTinHoaDonThuePhong(them);
            frm.ShowDialog();
            if (frm.themthanhcong&&frm.hdtp!=null)
            {
                if (controller.LayDanhSach().Result.Count <= 1)
                {
                    Loading();
                }
                else
                {
                    bs.Add(frm.hdtp);
                    dgvHoaDonThuePhong.Rows[TimDong(frm.hdtp.MaHD + "")].Selected = true;
                }
            }
            dem = 0; dem1 = 0;
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            _logger.Info(Commons.ToString() + ", Chọn thao tác xóa hóa đơn thuê phòng");

            DialogResult kq = MessageBox.Show("Bạn có muốn xóa dữ liệu này không?", "CẢNH BÁO", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            if (kq == DialogResult.Yes)
            {
                var aResult = controller.Xoa(toolStripStatusLabel2.Text);
                if (aResult.Exceptions.Any())
                {
                    string s = "";
                    foreach (var ex in aResult.Exceptions)
                    {
                        s += ex.Message + "\n";
                    }
                    MessageBox.Show(s);
                    _logger.Error(s);
                }
                MessageBox.Show("Xóa thành công hóa đơn có ID= " + toolStripStatusLabel2.Text);
                _logger.Info("Xóa thành công hóa đơn có ID= " + toolStripStatusLabel2.Text);
                bs.RemoveAt(TimDong(toolStripStatusLabel2.Text));
                dem = 0; dem1 = 0;
            }
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            _logger.Info(Commons.ToString() + ", Chọn thao tác cập nhật hóa đơn thuê phòng");

            if (toolStripStatusLabel2.Text != "" && controller.LayDanhSach().Result.Count > 0)
            {
                HoaDonThuePhong hdtp=new HoaDonThuePhong();
                if (saukhibatchitiethoadon)
                {
                    hdtp = controller.TimHoaDonTheoDK(hd => hd.MaHD + "" == toolStripStatusLabel2.Text).Result.Single();
                }
                else
                {
                     hdtp= (HoaDonThuePhong)bs[TimDong(toolStripStatusLabel2.Text)];
                }
                frmThongTinHoaDonThuePhong frm = new frmThongTinHoaDonThuePhong(hdtp,saukhibatchitiethoadon);
                frm.ShowDialog();
                
                if (frm.capnhatthanhcong && frm.hdtp != null)
                {
                    bs.RemoveAt(TimDong(toolStripStatusLabel2.Text));
                    bs.Add(frm.hdtp);
                    dgvHoaDonThuePhong.Rows[TimDong(frm.hdtp.MaHD+"")].Selected = true;
                }
            }
            dem = 0; dem1 = 0; saukhibatchitiethoadon = false;
        }
        
        private void btnTimKiem_Click(object sender, EventArgs e)
        {
            dem = 0; dem1 = 0;
            _logger.Info(Commons.ToString() + ", Chọn thao tác tìm kiếm hóa đơn thuê phòng");

            frmTimKiemHoaDonThuePhong frm = new frmTimKiemHoaDonThuePhong();
            frm.ShowDialog();
            switch (frm.rdName)
            { 
                case "rdFindByEmpID":
                    var aResult = controller.TimHoaDonTheoDK(hdtp => hdtp.MaNV + "" == frm.thongtintimkiem);
                    if (!aResult.Exceptions.Any())
                    {
                        bs.DataSource = aResult.Result;
                    }
                    else
                    {
                        string s = "";
                        foreach (var ex in aResult.Exceptions)
                        {
                            s += ex.Message + "\n";
                        }
                        MessageBox.Show(s);
                        _logger.Error(s);
                    }
                    break;
                case "rdFindByDate":
                    DateTime ngay = DateTime.Parse(frm.thongtintimkiem);
                    var aResult1 = controller.TimHoaDonTheoDK(hdtp => hdtp.NgayLapHD == ngay);
                    if (!aResult1.Exceptions.Any())
                    {
                        bs.DataSource = aResult1.Result;
                    }
                    else
                    {
                        string s = "";
                        foreach (var ex in aResult1.Exceptions)
                        {
                            s += ex.Message + "\n";
                        }
                        MessageBox.Show(s);
                        _logger.Error(s);
                    }
                    
                    break;
                case "rdFindAll":
                    bs.DataSource = controller.LayDanhSach().Result;
                    break;
            }
            
        }

        int dem = 0,dem1=0;

        private void btnIn_Click(object sender, EventArgs e)
        {
            Button btn = sender as Button;
            _logger.Info(Commons.ToString() + ", Chọn thao tác in hóa đơn thuê phòng");
            
            switch (btn.Name)
            {
                case "btnIn":
                    dem = 0;
                    if (dem1%2==0)
                    {
                        bs.DataSource = controller.TimHoaDonTheoDK(hd => hd.TrangThai == "Đã thanh toán").Result;
                        
                        MessageBox.Show("Chọn hóa đơn để in rồi chọn nút in hóa đơn lần nữa");
                        dem1++;
                    }
                    else
                    {
                        dem1++;
                        XrptHoaDonThuePhong rpt = new XrptHoaDonThuePhong(toolStripStatusLabel2.Text);
                        rpt.CreateDocument();
                        rpt.ShowPreview();
                    }
                    break;
                case "btnInPhieuDat":
                    dem1 = 0;
                    if (dem%2==0)
                    {
                        bs.DataSource = controller.TimHoaDonTheoDK(hd => hd.TrangThai == "Đã đặt cọc").Result;
                        MessageBox.Show("Chọn hóa đơn để in rồi chọn nút in phiếu đặt lần nữa");
                        dem++;
                    }
                    else
                    {
                        dem++;
                        XrptPhieuDat rpt = new XrptPhieuDat(toolStripStatusLabel2.Text);
                        rpt.CreateDocument();
                        rpt.ShowPreview();
                    }
                    break;
            }
        }

        private void ibtnThem_Click(object sender, EventArgs e)
        {
            btnThem.PerformClick();
        }

        private void ibtnXoa_Click(object sender, EventArgs e)
        {
            btnXoa.PerformClick();
        }

        private void ibtnCapNhat_Click(object sender, EventArgs e)
        {
            btnSua.PerformClick();
        }

        private void ibtnTimKiem_Click(object sender, EventArgs e)
        {
            btnTimKiem.PerformClick();
        }
        bool saukhibatchitiethoadon = false;
        private void xemchitietHDToolStripMenuItem_Click(object sender, EventArgs e)
        {
            _logger.Info(Commons.ToString() + ", Chọn thao tác xem chi tiết hóa đơn thuê phòng");

            FormChiTietHoaDonThuePhong frm = new FormChiTietHoaDonThuePhong(int.Parse(toolStripStatusLabel2.Text));
            frm.ShowDialog();
            saukhibatchitiethoadon = true;
            btnSua.PerformClick();
        }

        private void dgvHoaDonThuePhong_DoubleClick(object sender, EventArgs e)
        {
            xemchitietHDToolStripMenuItem.PerformClick();
        }

        private void themHDToolStripMenuItem_Click(object sender, EventArgs e)
        {
            btnThem.PerformClick();
        }

        private void capnhatHDToolStripMenuItem_Click(object sender, EventArgs e)
        {
            btnSua.PerformClick();
        }

        private void xoaHDToolStripMenuItem_Click(object sender, EventArgs e)
        {
            btnXoa.PerformClick();
        }

        private void timkiemHDToolStripMenuItem_Click(object sender, EventArgs e)
        {
            btnTimKiem.PerformClick();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            xemchitietHDToolStripMenuItem.PerformClick();
        }
    }
}
